Skip to content

Replace /stack with the Prisma Stack landing page - #8002

Merged
tylerhogarth merged 5 commits into
mainfrom
stack/prisma-stack-redesign
Jul 6, 2026
Merged

Replace /stack with the Prisma Stack landing page#8002
tylerhogarth merged 5 commits into
mainfrom
stack/prisma-stack-redesign

Conversation

@tylerhogarth

@tylerhogarth tylerhogarth commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Replaces the old /stack "Prisma in your stack" link grid with a new Prisma Stack marketing page.

What's here

  1. Hero with the teal ppg glow, an H1 wordmark, and the value prop.
  2. An interactive "stack simplified" flow diagram: Compute, Postgres, Bun and TypeScript wired with SVG connectors, a cycling frontend framework, and a sub-ms latency link. Scales to fit and clips so it never overflows on mobile.
  3. A vertical framework carousel (marquee + a Prisma Compute card) that reads cleanly on small screens.
  4. A Bun API grid, a Prisma Postgres data section with shiki-highlighted code, and a closing CTA.

Implementation notes

  1. Built with Tailwind + @prisma/eclipse (Button, Card, Action, CodeBlock) and semantic design tokens, so it themes in light and dark.
  2. Only the diagram/marquee geometry lives in a scoped CSS module (tokens only, no hardcoded colours); everything else uses shared components, matching the compute and postgres pages.
  3. Product marks: Font Awesome icons plus inline Prisma and Bun marks drawn in currentColor so they take each tile's colour.

Verified with typecheck, oxlint, oxfmt, and a local render at desktop and mobile widths.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added a refreshed “Prisma Stack” landing page with redesigned hero/sections, highlighted code snippets, and a new diagram-led layout.
    • Introduced interactive visuals: animated stack diagram, vertical framework marquee, and scroll-to-reveal content.
    • Added branded inline SVG marks for Prisma and Bun, plus updated stack content for Bun APIs and Postgres extensions.
  • Bug Fixes
    • Improved stack diagram rendering to fit its container reliably (including after font loading) to prevent unwanted horizontal overflow.

Rebuild the /stack route as a Prisma Stack marketing page: hero, an
interactive "stack simplified" flow diagram (Compute, Postgres, Bun,
TypeScript with SVG connectors and a cycling frontend framework), a
vertical framework carousel, a Bun API grid, a Prisma Postgres data
section with highlighted code, and a CTA.

Built with Tailwind + @prisma/eclipse (Button, Card, Action, CodeBlock)
and semantic design tokens so it themes in light and dark. Diagram and
marquee geometry live in a scoped CSS module; product marks use Font
Awesome plus inline Prisma and Bun marks tinted to currentColor.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview, Comment Jul 6, 2026 9:56am
docs Ready Ready Preview, Comment Jul 6, 2026 9:56am
eclipse Ready Ready Preview, Comment Jul 6, 2026 9:56am
site Ready Ready Preview, Comment Jul 6, 2026 9:56am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2952c2b4-62b1-4ff3-b6ce-347ff60ee97a

📥 Commits

Reviewing files that changed from the base of the PR and between 534506c and 342bc36.

📒 Files selected for processing (4)
  • apps/site/src/app/stack/page.tsx
  • apps/site/src/app/stack/reveal.tsx
  • apps/site/src/app/stack/stack-diagram.tsx
  • apps/site/src/app/stack/stack.module.css
🚧 Files skipped from review as they are similar to previous changes (3)
  • apps/site/src/app/stack/stack-diagram.tsx
  • apps/site/src/app/stack/stack.module.css
  • apps/site/src/app/stack/page.tsx

Walkthrough

The stack page is redesigned with new framework, Bun API, and Postgres extension data, new Bun and Prisma SVG marks, a scroll-reveal wrapper, an animated connector-based diagram, a framework marquee carousel, Shiki-rendered code samples, and updated page styling.

Changes

Prisma Stack page redesign

Layer / File(s) Summary
Stack data and marks
apps/site/src/app/stack/stack-data.ts, apps/site/src/app/stack/bun-mark.tsx, apps/site/src/app/stack/prisma-mark.tsx
Replaces the stack category data with framework, Bun API, and Postgres extension exports, and adds Bun and Prisma inline SVG mark components.
Scroll-reveal wrapper
apps/site/src/app/stack/reveal.tsx
Adds a client-side Reveal component that observes intersection changes and toggles reveal classes on its rendered element.
Framework carousel
apps/site/src/app/stack/framework-carousel.tsx
Adds a vertical carousel that scrolls frameworks in a marquee and shows a Prisma Compute highlight card below it.
Animated stack diagram
apps/site/src/app/stack/stack-diagram.tsx
Adds the stack diagram component that measures node positions, draws SVG connector paths, cycles the frontend framework, and renders the diagram UI.
Page helpers and metadata
apps/site/src/app/stack/page.tsx
Updates the page metadata inputs, adds highlighted code snippet rendering, and introduces a reusable section header wrapper.
Page sections and CTA
apps/site/src/app/stack/page.tsx
Replaces the hero and category grid with the new landing sections for the diagram, framework carousel, Bun APIs, Prisma ORM, Postgres extensions, and final call to action.
Stack module styles
apps/site/src/app/stack/stack.module.css
Adds page theming, simplified stack layout, flow diagram geometry, node card variants, and reveal and reduced-motion styles.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Related PRs: None identified from the provided information.

Suggested labels: enhancement, ui, site

Suggested reviewers: None identified from the provided information.


A stack of tools, reworked and bright,
New marks, new data, new page light.
Diagrams link, carousels glide,
Reveal on scroll, with code beside.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: replacing the old /stack page with a new Prisma Stack landing page.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@argos-ci

argos-ci Bot commented Jul 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected 1 ignored Jul 6, 2026, 10:03 AM

Drop the bespoke .fw-* marquee CSS and fwscroll keyframe in favour of the
existing @/components/marquee (two-copy loop, marquee-up keyframes, fade
mask). Row styling moves to Tailwind. Trims the CSS module to the
diagram/bracket geometry that has no eclipse/Tailwind equivalent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
apps/site/src/app/stack/stack-diagram.tsx (2)

144-156: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Resize handler is unthrottled and triggers a full SVG rebuild each call.

drawFlow reflows the DOM (multiple offsetWidth/offsetTop reads) and rewrites svg.innerHTML on every resize event, which can fire dozens of times per second during a drag-resize. Debouncing (e.g. rAF-batched or a short setTimeout debounce) would avoid layout-thrash on the hot resize path.

⚡ Suggested debounce
   useEffect(() => {
     drawFlow();
-    window.addEventListener("resize", drawFlow);
+    let raf = 0;
+    const onResize = () => {
+      cancelAnimationFrame(raf);
+      raf = requestAnimationFrame(drawFlow);
+    };
+    window.addEventListener("resize", onResize);
     if (document.fonts?.ready) document.fonts.ready.then(drawFlow);
     const t1 = setTimeout(drawFlow, 300);
     const t2 = setTimeout(drawFlow, 900);
     return () => {
-      window.removeEventListener("resize", drawFlow);
+      window.removeEventListener("resize", onResize);
+      cancelAnimationFrame(raf);
       clearTimeout(t1);
       clearTimeout(t2);
     };
   }, [drawFlow]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/site/src/app/stack/stack-diagram.tsx` around lines 144 - 156, The resize
path in stack-diagram.tsx is doing a full redraw on every window resize event
via drawFlow, which can cause layout thrash. Update the useEffect resize
listener to debounce or batch calls (for example with requestAnimationFrame or a
short timeout) so drawFlow runs at most once per resize burst, and make sure the
cleanup in the same effect cancels any pending scheduled redraws alongside
removing the listener.

295-295: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add aria-hidden to the dynamically-built connector SVG.

The <svg ref={svgRef}> element's content is entirely decorative (connector lines/arrowheads injected via innerHTML) but lacks aria-hidden, so assistive tech may attempt to parse the injected path markup.

♿ Suggested fix
-          <svg className={styles["flow-svg"]} ref={svgRef} />
+          <svg className={styles["flow-svg"]} ref={svgRef} aria-hidden />
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/site/src/app/stack/stack-diagram.tsx` at line 295, The dynamically
generated connector SVG in stack-diagram.tsx is decorative only, so update the
SVG element rendered by the stack diagram component to include aria-hidden. Use
the existing svgRef-based element in the stack diagram render path and keep the
injected innerHTML connector markup unchanged; just mark the SVG as hidden from
assistive technology so screen readers ignore it.
apps/site/src/app/stack/reveal.tsx (1)

16-16: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

ref as never erases type safety for the polymorphic Tag.

Casting to never silences the compiler entirely rather than narrowing to a shared DOM type. Typing the ref as HTMLElement (the common ancestor of div/section) would keep type checking meaningful without the blunt cast.

♻️ Suggested tightening
-  const ref = useRef<HTMLDivElement>(null);
+  const ref = useRef<HTMLElement>(null);
...
-    <Tag ref={ref as never} className={`${styles.reveal} ${className ?? ""}`}>
+    <Tag ref={ref} className={`${styles.reveal} ${className ?? ""}`}>

Also applies to: 36-40

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/site/src/app/stack/reveal.tsx` at line 16, The polymorphic Tag ref
typing in reveal.tsx is being forced through a `never` cast, which bypasses
useful type checking. Update the `useRef`/`Tag` usage in the reveal component to
use a shared DOM type like `HTMLElement` instead of `HTMLDivElement` plus `ref
as never`, so the ref remains compatible across both `div` and `section`
variants. Make the same tightening where the ref is passed through the related
`Tag` render path so the compiler can still validate the element shape.
apps/site/src/app/stack/stack-data.ts (1)

1-28: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider whether framework accent colors should live in the design-token system.

Only the Next.js entry uses a semantic token (var(--color-foreground-neutral) / var(--color-background-neutral-weak)); every other framework hardcodes brand hex/rgba values. Since the PR emphasizes "semantic design tokens for light and dark theming," worth confirming these brand-specific hex codes are intentionally theme-agnostic (typical for logo brand colors) rather than an oversight.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/site/src/app/stack/stack-data.ts` around lines 1 - 28, The framework
color values in frameworks are mostly hardcoded brand hex/rgba strings while
only Next.js uses semantic tokens, so make the color source intentional and
consistent. If these badges should participate in light/dark theming, replace
the inline color/bg values with semantic design tokens; otherwise keep the brand
colors in a clearly separated brand palette and document that Framework entries
are intentionally theme-agnostic in stack-data.ts.
apps/site/src/app/stack/stack.module.css (1)

366-371: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider extending prefers-reduced-motion coverage to swap/hover transitions.

The reduced-motion block turns off .reveal and .fw-track, but the framework-swap opacity transitions (.ss-fw, .n-frontend .node-title) and the .node:hover transform are left active. These are auto-triggered by the diagram's cycling framework display rather than user scroll, so motion-sensitive users would still see them animate.

♻️ Suggested addition
 `@media` (prefers-reduced-motion: reduce) {
   .reveal {
     opacity: 1;
     transform: none;
     transition: none;
   }
   .fw-track {
     animation: none;
   }
+  .ss-fw,
+  .node-title,
+  .node {
+    transition: none;
+  }
 }

Also applies to: 79-83, 248-252, 440-449

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/site/src/app/stack/stack.module.css` around lines 366 - 371, The
reduced-motion styles in stack.module.css only disable `.reveal` and
`.fw-track`, but the framework swap and hover animations still run. Extend the
existing `prefers-reduced-motion` block to also neutralize the `.ss-fw` /
`.n-frontend .node-title` opacity transitions and the `.node:hover` transform so
the diagram’s auto-cycling framework display stays motion-free for sensitive
users.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/site/src/app/stack/stack-diagram.tsx`:
- Around line 128-137: The cycling logic in stack-diagram.tsx leaves the inner
timeout unmanaged, so the callback in the useEffect around setInterval can still
run after unmount. Update the useEffect that schedules the framework swap to
store the timeout ID alongside the interval, and clear both in the cleanup
function; use the existing setSwapping, setIdx, and frameworks.length logic, but
make sure the delayed state updates are cancelled if the component unmounts
before the 240ms delay finishes.

---

Nitpick comments:
In `@apps/site/src/app/stack/reveal.tsx`:
- Line 16: The polymorphic Tag ref typing in reveal.tsx is being forced through
a `never` cast, which bypasses useful type checking. Update the `useRef`/`Tag`
usage in the reveal component to use a shared DOM type like `HTMLElement`
instead of `HTMLDivElement` plus `ref as never`, so the ref remains compatible
across both `div` and `section` variants. Make the same tightening where the ref
is passed through the related `Tag` render path so the compiler can still
validate the element shape.

In `@apps/site/src/app/stack/stack-data.ts`:
- Around line 1-28: The framework color values in frameworks are mostly
hardcoded brand hex/rgba strings while only Next.js uses semantic tokens, so
make the color source intentional and consistent. If these badges should
participate in light/dark theming, replace the inline color/bg values with
semantic design tokens; otherwise keep the brand colors in a clearly separated
brand palette and document that Framework entries are intentionally
theme-agnostic in stack-data.ts.

In `@apps/site/src/app/stack/stack-diagram.tsx`:
- Around line 144-156: The resize path in stack-diagram.tsx is doing a full
redraw on every window resize event via drawFlow, which can cause layout thrash.
Update the useEffect resize listener to debounce or batch calls (for example
with requestAnimationFrame or a short timeout) so drawFlow runs at most once per
resize burst, and make sure the cleanup in the same effect cancels any pending
scheduled redraws alongside removing the listener.
- Line 295: The dynamically generated connector SVG in stack-diagram.tsx is
decorative only, so update the SVG element rendered by the stack diagram
component to include aria-hidden. Use the existing svgRef-based element in the
stack diagram render path and keep the injected innerHTML connector markup
unchanged; just mark the SVG as hidden from assistive technology so screen
readers ignore it.

In `@apps/site/src/app/stack/stack.module.css`:
- Around line 366-371: The reduced-motion styles in stack.module.css only
disable `.reveal` and `.fw-track`, but the framework swap and hover animations
still run. Extend the existing `prefers-reduced-motion` block to also neutralize
the `.ss-fw` / `.n-frontend .node-title` opacity transitions and the
`.node:hover` transform so the diagram’s auto-cycling framework display stays
motion-free for sensitive users.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 47b02150-3960-4797-a503-4ee481044072

📥 Commits

Reviewing files that changed from the base of the PR and between 8ba14fb and 7e46ddf.

📒 Files selected for processing (8)
  • apps/site/src/app/stack/bun-mark.tsx
  • apps/site/src/app/stack/framework-carousel.tsx
  • apps/site/src/app/stack/page.tsx
  • apps/site/src/app/stack/prisma-mark.tsx
  • apps/site/src/app/stack/reveal.tsx
  • apps/site/src/app/stack/stack-data.ts
  • apps/site/src/app/stack/stack-diagram.tsx
  • apps/site/src/app/stack/stack.module.css

Comment thread apps/site/src/app/stack/stack-diagram.tsx
- Track and clear the framework-swap setTimeout on unmount
- rAF-batch the resize handler so drag-resize doesn't thrash layout
- aria-hidden the runtime-built connector SVG
- Drop the unused polymorphic `as` prop and `ref as never` cast in Reveal
- Extend prefers-reduced-motion to the diagram's swap + hover transitions

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tylerhogarth

Copy link
Copy Markdown
Contributor Author

Addressed the review in 664bc31:

  1. Untracked setTimeout (actionable) — the swap timeout is now stored and cleared with the interval on unmount.
  2. Unthrottled resize handlerdrawFlow on resize is now rAF-batched (and the frame is cancelled on cleanup).
  3. aria-hidden on the connector SVG — added; it's decorative.
  4. ref as never in Reveal — the polymorphic as prop was unused, so I dropped it and render a plain div with a correctly typed HTMLDivElement ref.
  5. prefers-reduced-motion coverage — extended to the auto-cycling swap transitions (.ss-fw, .n-frontend .node-title) and the .node:hover transform.

Not changed — framework accent colours in stack-data.ts: these are the frameworks' own brand colours (React Router red, Astro orange, etc.), used only for the monogram tiles, mirroring how the site's LogoGrid uses per-brand assets. They aren't part of the Prisma palette, so promoting them into the design-token system would be miscategorising them. Kept as-is intentionally.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tylerhogarth

Copy link
Copy Markdown
Contributor Author

@coderabbitai review and approve if there are no changes.

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
git log --oneline -5
git show 664bc31 --stat

Length of output: 1415


🏁 Script executed:

#!/bin/bash
git show 664bc31 -- apps/site/src/app/stack/stack-diagram.tsx apps/site/src/app/stack/reveal.tsx apps/site/src/app/stack/stack.module.css

Length of output: 4571


@tylerhogarth Verified commit 664bc31 directly against the diff — all five points check out:

  1. setTimeout trackingswapTimeout is now declared, assigned inside the interval callback, and cleared alongside clearInterval in the cleanup function. ✅
  2. Resize rAF-batchingonResize now wraps drawFlow with cancelAnimationFrame/requestAnimationFrame, and the pending frame is cancelled on cleanup. ✅
  3. aria-hidden on connector SVG — added directly to the <svg> element. ✅
  4. Reveal polymorphic prop removal — clean div with a properly typed HTMLDivElement ref, no more ref as never. ✅
  5. prefers-reduced-motion coverage — the media query block now also disables .ss-fw, .n-frontend .node-title, .node transitions, and .node:hover transform. ✅

Nice, clean fixes — nothing left outstanding on my end. Also agree with your reasoning on keeping the framework brand colors in stack-data.ts as-is; they're intentionally out of the design-token system since they represent third-party brand identity, not Prisma's palette.

Approving now.

[approve]

@tylerhogarth

Copy link
Copy Markdown
Contributor Author

@coderabbitai approve

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Comments resolved. Approval is disabled; enable reviews.request_changes_workflow to allow explicit top-level @coderabbitai resolve or @coderabbitai approve commands.

@tylerhogarth
tylerhogarth merged commit 4ce472a into main Jul 6, 2026
16 of 17 checks passed
@tylerhogarth
tylerhogarth deleted the stack/prisma-stack-redesign branch July 6, 2026 10:08
ankur-arch pushed a commit that referenced this pull request Jul 6, 2026
* Add redesigned /stack social (OG) image

Replace the stale 600x315 ORM card with the 1200x630 Prisma Stack card
that matches the merged redesign (#8002). The page metadata already
references /og/og-stack.png, so no code change is needed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Update /stack meta title and description

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Sync /stack LLM content with the updated page metadata

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants